package cn.harry.cabinet.model.entity

import androidx.room.Entity
import androidx.room.PrimaryKey

/**
 * 系统操作日志表
 * 记录所有系统操作，包括：
 * 1. 用户操作（取仪器、还仪器、认证等）
 * 2. 系统操作（配置修改、定时任务、数据同步等）
 * 3. 接口调用（数据推送、外部请求等）
 */
@Entity(tableName = "operation_logs")
data class OperationLog(
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0,
    
    /** 操作时间戳 */
    val timestamp: Long = System.currentTimeMillis(),
    
    /** 
     * 操作类型
     * USER_AUTH - 用户认证（刷脸、刷卡、密码）
     * INSTRUMENT_TAKE - 取仪器
     * INSTRUMENT_RETURN - 还仪器
     * DATA_SYNC - 数据同步
     * API_CALL - 接口调用
     * CONFIG_CHANGE - 配置修改
     * SCHEDULED_TASK - 定时任务
     * SYSTEM_EVENT - 系统事件
     */
    val operationType: String,
    
    /** 
     * 操作子类型（可选）
     * 如：FACE_RECOGNITION, CARD_SCAN, PASSWORD_AUTH
     *     PUSH_SUCCESS, PUSH_FAILED
     *     THEME_CHANGE, PASSWORD_CHANGE
     */
    val operationSubType: String? = null,
    
    /** 
     * 操作结果
     * SUCCESS - 成功
     * FAILED - 失败
     * PENDING - 进行中
     */
    val result: String,
    
    /** 操作描述 */
    val description: String,
    
    /** 操作人ID（可选，系统操作时为空） */
    val operatorId: Long? = null,
    
    /** 操作人工号（可选） */
    val operatorEmployeeId: String? = null,
    
    /** 操作人姓名（可选） */
    val operatorName: String? = null,
    
    /** 目标对象ID（可选，如柜子ID、用户ID等） */
    val targetId: Long? = null,
    
    /** 目标对象类型（可选，如CABINET、USER、CONFIG等） */
    val targetType: String? = null,
    
    /** 目标对象名称（可选，如柜号、用户名等） */
    val targetName: String? = null,
    
    /** 
     * 详细数据（JSON格式，可选）
     * 存储额外的详细信息，如：
     * - 认证方式的详细参数
     * - 接口请求/响应数据
     * - 配置修改前后的值
     * - 错误堆栈信息
     */
    val detailData: String? = null,
    
    /** IP地址（可选，接口调用时记录） */
    val ipAddress: String? = null,
    
    /** 设备信息（可选） */
    val deviceInfo: String? = null,
    
    /** 错误信息（失败时记录） */
    val errorMessage: String? = null,
    
    /** 错误代码（失败时记录） */
    val errorCode: String? = null
)